package org.android.brasil.projetos.oktoberfest2011.view;

import java.util.List;

import org.android.brasil.projetos.oktoberfest2011.R;
import org.android.brasil.projetos.oktoberfest2011.negocio.model.Apresentacao;
import org.android.brasil.projetos.oktoberfest2011.persistencia.ApresentacaoDAO;
import org.android.brasil.projetos.oktoberfest2011.utils.AnalyticsUtils;
import org.android.brasil.projetos.oktoberfest2011.utils.CompartilhamentoListener;
import org.android.brasil.projetos.oktoberfest2011.utils.Constantes;
import org.android.brasil.projetos.oktoberfest2011.utils.ControleDeBackground;
import org.android.brasil.projetos.oktoberfest2011.utils.DataUtil;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.RelativeLayout;
import android.widget.TextView;

/**
 * 
 * @author júlio
 * 
 */
public class ResultadosAdapter extends BaseAdapter {

	private LayoutInflater mInflater;

	private List<Apresentacao> apresentacoes;
	private Context ctx;
	private AnalyticsUtils mGa;

	public ResultadosAdapter(Context context, List<Apresentacao> apr) {
		ctx = context;
		this.mInflater = LayoutInflater.from(context);
		this.apresentacoes = apr;

		this.mGa = AnalyticsUtils.getInstance(context);

	}

	public int getCount() {
		return apresentacoes.size();
	}

	public Object getItem(int position) {
		return apresentacoes.get(position);
	}

	public long getItemId(int position) {
		return position;
	}

	public View getView(int position, View convertView, ViewGroup parent) {
		final int pos = position;
		ViewHolder holder;
		Apresentacao apr = apresentacoes.get(position);

		if (convertView == null) {
			holder = new ViewHolder();

			convertView = mInflater.inflate(R.layout.buscar_resultados_item,
					null);
			holder.tvCategoriaApresentacao = (TextView) convertView
					.findViewById(R.idResultadosItem.tv_categoria_apresentacao);
			holder.tvDataHoraLocal = (TextView) convertView
					.findViewById(R.idResultadosItem.tv_data_hora_local);

			holder.rl = (RelativeLayout) convertView
					.findViewById(R.idResultadosItem.relativeLayoutItem);

			holder.ivFavoritar = (CheckBox) convertView
					.findViewById(R.idResultadosItem.favoritar);

			convertView.setTag(holder);

		} else {
			holder = (ViewHolder) convertView.getTag();
		}

		holder.tvCategoriaApresentacao.setText(apr.getCategoria() + " - "
				+ apr.getNome());
		if (apr.getCategoria().equals(Constantes.RETRETA)) {
			holder.tvDataHoraLocal.setText(apr.getDia()
					+ Constantes.MES_E_ANO
					+ " - "
					+ (apr.getHoraInicio() == Constantes.MANHA ? ctx
							.getResources().getString(R.string.de_manha) : ctx
							.getResources().getString(R.string.de_tarde)) + " "
					+ apr.getSetor());
		} else {
			holder.tvDataHoraLocal.setText(apr.getDia() + Constantes.MES_E_ANO
					+ " - " + DataUtil.formatarHora(apr.getHoraInicio())
					+ " - " + apr.getSetor());
		}
		new CompartilhamentoListener(ctx, holder.tvDataHoraLocal, apr);

		ControleDeBackground.setBackgroundAgenda(new View[] { holder.rl },
				null, new TextView[] { holder.tvCategoriaApresentacao,
						holder.tvDataHoraLocal }, position, apr.getDia());

		holder.ivFavoritar.setChecked(apr.isFavorito());

		holder.ivFavoritar
				.setOnCheckedChangeListener(new OnCheckedChangeListener() {
					private int p = pos;

					public void onCheckedChanged(CompoundButton buttonView,
							boolean isChecked) {
						Apresentacao apr = apresentacoes.get(p);
						apr.setFavorito(isChecked);
						ApresentacaoDAO.open(ctx);
						ApresentacaoDAO.atualizar(apr);
						ApresentacaoDAO.close();

						if (isChecked) {
							mGa.favTrackEvent(apr.getNome(), 1);
						} else {
							mGa.favTrackEvent(apr.getNome(), 0);
						}
					}
				});

		return convertView;
	}

	static class ViewHolder {
		private TextView tvCategoriaApresentacao;
		private TextView tvDataHoraLocal;
		private RelativeLayout rl;
		private CheckBox ivFavoritar;
	}

}
